#pragma once

//@author A0096950U
#include <string>
#include <assert.h>
#include <vector>

using namespace std;

class Utilities {
public:
	static const string STRING_EMPTY;
	static const string STRING_WHITESPACE;
	
	static const string STRING_INVALID_MONTH;

	static const string STRING_DEFAULT_DESCRIPTION;
	static const string STRING_DEFAULT_DATE;
	static const string STRING_DEFAULT_START_TIME;
	static const string STRING_DEFAULT_END_TIME;
	static const string STRING_DEFAULT_TAG;

	static const string STRING_DEFAULT_START_TIME_NUMERICAL;
	static const string STRING_DEFAULT_END_TIME_NUMERICAL;

	static const string STRING_ADD;
	static const string STRING_DELETE;
	static const string STRING_MODIFY;
	static const string STRING_TO;
	static const string STRING_DONE;
	static const string STRING_SEARCH;
	static const string STRING_TODAY;
	static const string STRING_UNDO;
	static const string STRING_EXIT;
	static const string STRING_ALL;

	static const string STRING_TOMORROW;

	static const string STRING_MON;
	static const string STRING_TUE;
	static const string STRING_WED;
	static const string STRING_THU;
	static const string STRING_FRI;
	static const string STRING_SAT;
	static const string STRING_SUN;

	static const string STRING_BLOCK_OPEN;
	static const string STRING_BLOCK_CLOSE;

	static const string STRING_AM;
	static const string STRING_PM;
	static const string STRING_MN;
	static const string STRING_NN;

	static const string STRING_JAN;
	static const string STRING_FEB;
	static const string STRING_MAR;
	static const string STRING_APR;
	static const string STRING_MAY;
	static const string STRING_JUN;
	static const string STRING_JUL;
	static const string STRING_AUG;
	static const string STRING_SEP;
	static const string STRING_OCT;
	static const string STRING_NOV;
	static const string STRING_DEC;

	// Pre: nil
	// Post: converts string to lowercase
	static void toLowerCase(string& inputString);

	// Pre: nil
	// Post: converts string to uppercase
	static void toUpperCase(string& inputString);

	//Pre:nil
	//Post: converts string to standard case ie: JAN to Jan
	static void toStandardCase(string& inputString);

	// Pre: nil
	// Post: remove preceeding whitespaces from string
	static void trimString(string& inputString);

	// Pre: nil
	// Post: first word removed from line and returned
	//		 empty string returned if there is no word
	static string extractFirstWord(string& inputString);

	//Pre: month is represented in numbers
	//Post: month is spelled out using the first three letters
	//		of the name of the month
	static string monthInWords(int);

	//Pre: time in 24-hour format
	//Post: time in 12-hour format
	static string convertTo12Hr(int time);

	// Pre: time between 0000 and 1200
	// Post: 12hr format with AM
	static string timeInAM(int time);

	// Pre: time between 1200 and 2400
	// Post: 12hr format with PM
	static string timeInPM(int time);
};

